package com.qiangang.yan.tools.util;

import java.sql.Timestamp;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * 转换工具类<br>
 * 若待转换值为null或者出现异常，则使用默认值
 */
public class ConvertUtils {

    /**
     * 字符串转换为int
     */
    public static int strToInt(String str, int defaultValue) {
        try {
            defaultValue = Integer.parseInt(str);
        } catch (Exception localException) {
        }
        return defaultValue;
    }

    /**
     * String转换为long
     */
    public static long strToLong(String str, long defaultValue) {
        try {
            defaultValue = Long.parseLong(str);
        } catch (Exception localException) {
        }
        return defaultValue;
    }

    /**
     * 字符串转换为float
     */
    public static float strToFloat(String str, float defaultValue) {
        try {
            defaultValue = Float.parseFloat(str);
        } catch (Exception localException) {
        }
        return defaultValue;
    }

    /**
     * String转换为Double
     */
    public static double strToDouble(String str, double defaultValue) {
        try {
            defaultValue = Double.parseDouble(str);
        } catch (Exception localException) {
        }
        return defaultValue;
    }

    /**
     * 字符串转换日期
     */
    public static Date strToDate(String str, Date defaultValue) {
        return strToDate(str, "yyyy-MM-dd HH:mm:ss", defaultValue);
    }

    /**
     * 字符串转换为指定格式的日期
     */
    public static Date strToDate(String str, String format, Date defaultValue) {
        // jdk 1.8
        DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
        ZoneId zoneId = ZoneId.systemDefault();
        LocalDateTime localDateTime = LocalDateTime.parse(str, df);
        ZonedDateTime zdt = localDateTime.atZone(zoneId);
        defaultValue = Date.from(zdt.toInstant());
        return defaultValue;
    }

    /**
     * 日期转换为字符串
     */
    public static String dateToStr(Date date, String defaultValue) {
        return dateToStr(date, "yyyy-MM-dd HH:mm:ss", defaultValue);
    }

    /**
     * 日期转换为指定格式的字符串
     */
    public static String dateToStr(Date date, String format, String defaultValue) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
        Instant instant = date.toInstant();
        ZoneId zoneId = ZoneId.systemDefault();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zoneId);
        defaultValue = dateTimeFormatter.format(localDateTime);
        return defaultValue;
    }

    /**
     * 如果字符串为空则使用默认字符串
     */
    public static String strToStr(String str, String defaultValue) {
        if ((str != null) && (!(str.isEmpty()))) {
            defaultValue = str;
        }
        return defaultValue;
    }

    /**
     * util date 转换为 sqldate
     */
    public static java.sql.Date dateToSqlDate(Date date) {
        return new java.sql.Date(date.getTime());
    }

    /**
     * sql date 转换为 util date
     */
    public static Date sqlDateToDate(java.sql.Date date) {
        return new Date(date.getTime());
    }

    /**
     * date 转换为 timestamp
     */
    public static Timestamp dateToSqlTimestamp(Date date) {
        return new Timestamp(date.getTime());
    }

    /**
     * timestamp 转换为date
     */
    public static Date qlTimestampToDate(Timestamp date) {
        return new Date(date.getTime());
    }
}
